var _sz=_sz||[];_sz&&_sz.core&&_sz.core._isloaded!=null?_sz.core.warn&&_sz.core.warn("Script requested to load and execute again, this is not desirable and will be blocked"):(_sz.push(["accountid",6289812]),_sz.push(["region","r2"]),_sz.push(["endpoint","global.r2"]),_sz.push(["custom",function(){(function($){"use strict";$&&$(document).ready(function(){var testing=!1,track=function(ev){ev=["event"].concat(ev);testing?console.log(ev):_sz.push(ev)},href=window.location.href,isChecked=!1,currentURL=window.location;if("https://www.governor.virginia.gov/constituent-services/foia-requests/"==currentURL)$("body").on("click","button.ctct-form-button",function(){isChecked==!1&&(track(["Button","Submit","Subscribe to Newsletter (blue)"]),isChecked=!0)})})})(window.jQuery),function($){"use strict";$&&$(document).ready(function(){var testing=!1,track=function(ev){ev=["event"].concat(ev);testing?console.log(ev):_sz.push(ev)},href=window.location.href,isChecked=!1,currentURL=window.location;if("https://www.governor.virginia.gov/"==currentURL)$("body").on("click","button.ctct-form-button",function(){isChecked==!1&&(track(["Button","Submit","Subscribe to Newsletter (red)"]),isChecked=!0)})})}(window.jQuery)},"Event Tracking - 1486947"]),_sz.push(["custom",function(){(function($){"use strict";$&&$(document).ready(function(){$("#search-container input").focusout(function(){_sz.push(["trackdynamic",[["url",window.location.href],["ref",document.referrer],["sw",jQuery(".st-search-set-focus").val()],["hits",jQuery(".st-query-present strong:nth-of-type(3)").text()]]])})})})(window.jQuery)},"Internal Search - 1486946"]),_sz.push(["custom",function(){(function($){"use strict";$&&$(document).ready(function(){var testing=!1,track=function(ev){ev=["event"].concat(ev);testing?console.log(ev):_sz.push(ev)},href=window.location.href;if(href.indexOf("varetire.org")>-1)$("#szOptOutIn").on("mousedown",function(){track(["Button","Toggle",this.innerText])})})})(window.jQuery)},"Event Tracking - 3201940"]),_sz.push(["custom",function(){(function($){"use strict";$&&$(document).ready(function(){$(".dropdown-menu .searchBox.ss360-custom-search__searchbox.ss360-n-input").focusout(function(){_sz.push(["trackdynamic",[["url",window.location.href],["ref",document.referrer],["sw",jQuery(".dropdown-menu .searchBox.ss360-custom-search__searchbox.ss360-n-input").val()]]])})})})(window.jQuery)},"Internal Search Pt 1 - 3426818"]),_sz.push(["custom",function(){(function($){"use strict";$&&$(document).ready(function(){$("#ss360-layer").on("focusout","input#ss360-custom-searchbox",function(){_sz.push(["trackdynamic",[["url",window.location.href],["ref",document.referrer],["sw",jQuery("input#ss360-custom-searchbox").val()]]])})})})(window.jQuery)},"Internal Search Pt 2 - 3426818"]),_sz.push(["detect_struggles",{rageClick:{clickThreshold:4,clickRadius:20,timeWindowMs:2e3},excessiveScroll:{continuous:{pagesThreshold:3,timeWindowMs:1500},backAndForth:{minScrollHeightMultiplier:1.5,pagesThreshold:.5,timeWindowMs:1e3},rage:{directionChanges:4,timeWindowMs:1e3},debounceMs:1e3}}]),_sz.push(["heatmap",{matches:{permanent:["https://www.vita.virginia.gov","https://www.vita.virginia.gov/procurement/buy-it-manual","https://www.vita.virginia.gov/services/website-solutions","https://www.governor.virginia.gov","https://www.dpor.virginia.gov","https://www.dpor.virginia.gov/Boards/Contractors","https://www.dpor.virginia.gov/FormsAndApplications","https://www.dpor.virginia.gov/LicenseLookup","https://elections.virginia.gov","https://www.elections.virginia.gov","https://www.elections.virginia.gov#","https://www.elections.virginia.gov/casting-a-ballot/candidate-list/upcoming-elections.html","https://www.elections.virginia.gov/media/formswarehouse/voter-id/outreach-materials/documents/Voter-Identification-Chart---Revised-09.2024.pdf","https://www.elections.virginia.gov/resultsreports/election-results","https://www.elections.virginia.gov/resultsreports/registration-statistics/2025-registration-statistics","https://dss.virginia.gov","https://dss.virginia.gov/abuse","https://dss.virginia.gov/adoption","https://dss.virginia.gov/benefit","https://dss.virginia.gov/benefit/food.cgi","https://dss.virginia.gov/benefit/snap.cgi","https://dss.virginia.gov/community","https://dss.virginia.gov/contact_us/index.cgi","https://dss.virginia.gov/facility/search/cc2.cgi","https://dss.virginia.gov/family/dcse","https://dss.virginia.gov/fmf","https://dss.virginia.gov/fmf/medical.html","https://dss.virginia.gov/localagency/index.cgi","https://dss.virginia.gov/needhelp.cgi","https://www.dss.virginia.gov/adults.cgi","https://www.dss.virginia.gov/benefit/ea","https://www.dss.virginia.gov/benefit/sunbucks/index.cgi","https://www.dss.virginia.gov/children.cgi","https://www.dss.virginia.gov/families.cgi","https://www.dss.virginia.gov/family/ap/index.cgi","https://www.dss.virginia.gov/family/fc/index.cgi","https://www.dss.virginia.gov/fosterVA/index.html","https://www.dss.virginia.gov/geninfo/index.cgi","https://www.dss.virginia.gov/licensing/index.cgi","https://www.dss.virginia.gov/news","https://www.dss.virginia.gov/touts.cgi","https://www.dhrm.virginia.gov/payandholidaycalendar","https://www.doe.virginia.gov","https://www.doe.virginia.gov/parents-students/parent-resources","https://www.doe.virginia.gov/programs-services/special-education/information-for-families","https://www.doe.virginia.gov/state-board-data-funding/accreditation-accountability/school-performance-and-support-framework","https://easyaccess.virginia.gov","https://easyaccess.virginia.gov/braininjury","https://easyaccess.virginia.gov/safety","http://www.easyaccess.virginia.gov","https://dwr.virginia.gov","https://www.odga.virginia.gov","https://www.odga.virginia.gov/resources","https://www.oag.state.va.us/citizen-resources/civil-rights","https://www.dmas.virginia.gov","https://www.dmas.virginia.gov/about-us","https://www.dmas.virginia.gov/appeals","https://www.dmas.virginia.gov/data-reporting","https://www.dmas.virginia.gov/for-applicants","https://www.dmas.virginia.gov/for-applicants/applying-for-medicaid","https://www.dmas.virginia.gov/for-applicants/eligibility-guidance/eligibility-manual","https://www.dmas.virginia.gov/for-members","https://www.dmas.virginia.gov/for-members/benefits-and-services","https://www.dmas.virginia.gov/for-members/benefits-and-services/dental","https://www.dmas.virginia.gov/for-members/cardinal-care-members","https://www.dmas.virginia.gov/for-members/find-a-provider","https://www.dmas.virginia.gov/for-providers","https://www.dmas.virginia.gov/for-providers/rates-and-rate-setting/procedure-fee-files-cpt-codes","https://www.dmas.virginia.gov/news-updates","https://www.vafire.com","https://www.vafire.com/state-fire-marshals-office","https://www.vafire.com/training-and-courses","https://www.vafire.com/training-and-courses/become-a-firefighter","https://www.vafire.com/training-and-courses/students","https://www.vafire.com/training-and-courses/technical-services/technical-rescue","https://www.vafire.com/virginia-fire-marshal-academy-about","https://www.djj.virginia.gov","https://www.djj.virginia.gov/pages/admin/admin-finance.htm","https://www.djj.virginia.gov/pages/admin/information-services.htm","https://www.djj.virginia.gov/pages/chief-deputy/chief-deputy.htm","https://www.djj.virginia.gov/pages/community/community-programs.htm","https://www.djj.virginia.gov/pages/policy/policy.htm","https://www.djj.virginia.gov/pages/rei/rei.htm","https://www.djj.virginia.gov/pages/residential/bon-air.htm","https://appointments.dmv.virginia.gov/OABS/Appointment/Index/f9d2f0ce-2853-4b10-969f-2cfcdc543d1c","https://transactions.dmv.virginia.gov/apps/webtrans/CustomerProfile/Details.aspx","https://transactions.dmv.virginia.gov/apps/webtrans/vehicle_registration/intro.aspx","https://www.dmv.virginia.gov","https://www.dmv.virginia.gov/","https://www.dmv.virginia.gov/about","https://www.dmv.virginia.gov/about/visit","https://www.dmv.virginia.gov/appointments","https://www.dmv.virginia.gov/businesses","https://www.dmv.virginia.gov/businesses/insurance/intro","https://www.dmv.virginia.gov/careers","https://www.dmv.virginia.gov/contact-us","https://www.dmv.virginia.gov/espanol","https://www.dmv.virginia.gov/forms","https://www.dmv.virginia.gov/how-do-i","https://www.dmv.virginia.gov/licenses-ids","https://www.dmv.virginia.gov/licenses-ids/exams/know-exam","https://www.dmv.virginia.gov/licenses-ids/improvement/clinics-schools","https://www.dmv.virginia.gov/licenses-ids/license","https://www.dmv.virginia.gov/licenses-ids/mobile-id","https://www.dmv.virginia.gov/licenses-ids/mobile-id/faq","https://www.dmv.virginia.gov/licenses-ids/motorcycle","https://www.dmv.virginia.gov/licenses-ids/real-id","https://www.dmv.virginia.gov/locations","https://www.dmv.virginia.gov/locations/arlington","https://www.dmv.virginia.gov/moving","https://www.dmv.virginia.gov/online-services","https://www.dmv.virginia.gov/online-services-all","https://www.dmv.virginia.gov/records","https://www.dmv.virginia.gov/records/family-deceased/transfer-ownership","https://www.dmv.virginia.gov/vehicles","https://www.dmv.virginia.gov/vehicles/buy-sell","https://www.dmv.virginia.gov/vehicles/license-plates/search","https://www.dmv.virginia.gov/vehicles/title","https://www.dmv.virginia.gov/vehicles/title/etitle","https://www.dmv.virginia.gov/vehicles/title/substitute","https://www.doa.virginia.gov","https://www.doa.virginia.gov/forms.shtml","https://www.doa.virginia.gov/onlineservices.shtml","https://www.doa.virginia.gov/reference.shtml","https://www.doa.virginia.gov/reports.shtml","http://dcr.virginia.gov/state-parks/besafe","https://www.dcr.virginia.gov/state-parks/camping-fees.php","https://www.deq.virginia.gov/get-involved/about-us/contact-us","https://www.deq.virginia.gov/our-programs/enforcement","https://www.deq.virginia.gov/permits/public-notices/water/land-application-virginia-pollution-abatement-vpa","https://www.deq.virginia.gov/topics-of-interest/south-hill-industrial-fire","https://www.vdacs.virginia.gov","https://www.vdacs.virginia.gov/about-farm-recovery-block-grant.shtml","https://www.vdacs.virginia.gov/animals-animal-admissions.shtml","https://www.vdacs.virginia.gov/animals-animal-identification.shtml","https://www.vdacs.virginia.gov/inspection-and-grading-fruit-vegetable-and-peanut-marketing.shtml","https://www.vdacs.virginia.gov/inspection-and-grading-services.shtml","https://www.vdacs.virginia.gov/markets-and-finance-market-news.shtml","https://www.vdacs.virginia.gov/pesticides.shtml","https://www.vdacs.virginia.gov/plant-and-pest.shtml","https://www.vdacs.virginia.gov/plant-industry-services-spotted-lanternfly.shtml","https://gunstonhall.org","https://smv.org","https://smv.org/explore/dome","https://smv.org/explore/green","https://smv.org/explore/green/audio-explorations","https://smv.org/explore/things-to-do/","https://smv.org/explore/things-to-do/summer-camp","https://smv.org/get-involved/membership/","https://smv.org/get-involved/support","https://smv.org/groups","https://smv.org/learn","https://smv.org/learn/blog/best-of-the-best","https://smv.org/visit/hours-schedule","https://smv.org/visit/specialevents","https://tickets.smv.org/smv/events","https://www.varetire.org/","https://www.varetire.org/about","https://www.varetire.org/about/board/meetings","https://www.varetire.org/benefits-and-programs","https://www.varetire.org/benefits-and-programs/benefits/benefit-payout-options","https://www.varetire.org/benefits-and-programs/benefits/death-in-service","https://www.varetire.org/benefits-and-programs/benefits/life-insurance","https://www.varetire.org/benefits-and-programs/benefits/military","https://www.varetire.org/benefits-and-programs/benefits/severance-benefits","https://www.varetire.org/benefits-and-programs/programs/disability","https://www.varetire.org/benefits-and-programs/programs/disability/vsdp","https://www.varetire.org/benefits-and-programs/programs/long-term-care","https://www.varetire.org/benefits-and-programs/programs/pps","https://www.varetire.org/calculators","https://www.varetire.org/careers","https://www.varetire.org/contact","https://www.varetire.org/contact/web-support","https://www.varetire.org/education/","https://www.varetire.org/education/benefit-topics","https://www.varetire.org/education/financial-literacy","https://www.varetire.org/education/one-on-one-counseling-appointments","https://www.varetire.org/education/retirement-planning","https://www.varetire.org/financial-wellness","https://www.varetire.org/forms","https://www.varetire.org/glossary","https://www.varetire.org/investments","https://www.varetire.org/links","https://www.varetire.org/mbp","https://www.varetire.org/member-milestones/adroinfo","https://www.varetire.org/member-milestones/naming-a-beneficiary","https://www.varetire.org/milestones","https://www.varetire.org/news-releases","https://www.varetire.org/publications","https://www.varetire.org/retirees","https://www.varetire.org/retirees/insurance/healthinscredit","https://www.varetire.org/retirement-plans","https://www.varetire.org/retirement-plans/defined-benefit/plan1","https://www.varetire.org/retirement-plans/defined-benefit/plan2","https://www.varetire.org/retirement-plans/defined-contribution-plans","https://www.varetire.org/retirement-plans/defined-contribution-plans/dcp-transition","https://www.varetire.org/search","https://www.varetire.org/sitemap","https://www.varetire.org/web-policy","https://www.varetire.org/web-policy/foia","https://coverva.dmas.virginia.gov","https://coverva.dmas.virginia.gov#","https://coverva.dmas.virginia.gov/apply","https://coverva.dmas.virginia.gov/apply/apply-for-coverage","https://coverva.dmas.virginia.gov/learn/am-i-eligible","https://coverva.dmas.virginia.gov/learn/coverage-for-children/back-to-school","https://coverva.dmas.virginia.gov/learn/coverage-for-children/back-to-school/messaging-material","https://coverva.dmas.virginia.gov/learn/health-coverage-for-non-citizens","https://coverva.dmas.virginia.gov/learn/insurance-for-adults/adults-19-64-years-old","https://coverva.dmas.virginia.gov/learn/insurance-for-children/back-to-school","https://coverva.dmas.virginia.gov/learn/our-programs","https://coverva.dmas.virginia.gov/learn/our-programs#","https://coverva.dmas.virginia.gov/members/renew-my-coverage","https://coverva.dmas.virginia.gov/members/renew-my-coverage#:~:text=Online%3A%20Go%20to%20commonhelp.virginia,888%2D221%2D1590).","https://coverva.dmas.virginia.gov/order-materials","https://coverva.dmas.virginia.gov/return-to-normal-enrollment/toolkits-and-materials","https://hr.dmas.virginia.gov/current-employees/employee-relations/workplace-harassment/","https://vtrc.virginia.gov","https://www.vdot.virginia.gov","https://www.vdot.virginia.gov/about","https://www.vdot.virginia.gov/contact","https://www.vdot.virginia.gov/doing-business/technical-guidance-and-support/technical-guidance-documents","https://www.vdot.virginia.gov/projects/projects-search","https://www.vdot.virginia.gov/travel-traffic/travel-advisories","https://uidirect.vec.virginia.gov/CSS/CSSLogon.htm","https://www.vec.virginia.gov/appeals","https://www.vec.virginia.gov/common-questions","https://www.vec.virginia.gov/separation-wage-report","https://www.vec.virginia.gov/taxes","https://www.vec.virginia.gov/unemployed","https://www.vec.virginia.gov/unemployed/UI-Portal-Helpful-Hints","https://employers.varetire.org","https://employers.varetire.org/benefits","https://employers.varetire.org/education-and-training","https://employers.varetire.org/employer-hub","https://employers.varetire.org/financial-reporting","https://employers.varetire.org/forms","https://employers.varetire.org/latest-news","https://employers.varetire.org/news-and-insights/myvrs-and-myvrs-financial-wellness-toolkit","https://employers.varetire.org/new-to-your-job","https://employers.varetire.org/plans","https://employers.varetire.org/publications","https://employers.varetire.org/publications/order-publications","https://495next.vdot.virginia.gov/lane-closure-and-traffic-impact-updates/","https://www.vmi.edu/admissions-and-aid/","https://dcp.varetire.org/transition","https://dcp.varetire.org/transition,","https://myvrs.varetire.org/login"],include:[],exclude:[]}}]),_sz.push(["event_tracking",{id:483,configuration:{trackOn:{urlMatch:{pattern:"^https://www\\.dcr\\.virginia\\.gov/dam-safety-and-floodplains/floodawareness$",options:"i"}},type:"click",click:{cssSelector:"div.container > div > div > p > a"},category:{static:"outbound"},action:{static:"click"},label:{static:"",dynamic:!0}}}]),_sz.push(["event_tracking",{id:870,configuration:{trackOn:{urlMatch:{pattern:"^https://www\\.doa\\.virginia\\.gov/general/jobs\\.shtml$",options:"i"}},type:"click",click:{cssSelector:"div.container > div.row.pageemulator > section.col-xs-12 > div > ul > li > a"},category:{static:"job search"},action:{static:"click"},label:{static:"",dynamic:!0}}}]),_sz.push(["event_tracking",{id:899,configuration:{trackOn:{urlMatch:{pattern:"https://www\\.varetire\\.org/",options:"i"}},type:"click",click:{cssSelector:"div.int-page.container > div.row > aside.right-content.right-callout.col-12.col-md-4.col-lg-3.my-xl-3.px-xl-5 > a > div.callout-block.myvrs-callout > div.callout-overlay > section.callout-caption.px-5.p-md-3.p-xl-4"},category:{static:"cta myvrs"},action:{static:"click"},label:{static:"",dynamic:!0}}}]),_sz.push(["event_tracking",{id:900,configuration:{trackOn:{urlMatch:{pattern:"/education/",options:"i"}},type:"click",click:{cssSelector:"div.int-page.container > div.row > aside.right-content.right-callout.col-12.col-md-4.col-lg-3.my-xl-3.px-xl-5 > a > div.callout-block.finwell-callout > div.callout-overlay > section.callout-caption.px-5.p-md-3.p-xl-4"},category:{static:"education pages"},action:{static:"click"},label:{static:"myVRS Financial Wellness | Tips, tools and timesavers"}}}]),_sz.push(["event_tracking",{id:901,configuration:{trackOn:{urlMatch:{pattern:"https://www\\.varetire\\.org/",options:"i"}},type:"click",click:{cssSelector:"div.int-page.container > div.row > aside.right-content.col-12.col-md-4.col-lg-3.col-xl-2.my-xl-3.right-callout.pr-xl-0 > div.callout-block.milestones-callout > div.callout-overlay > section.callout-caption.p-3 > span > a.btn.btn-primary.btn-sm.m-0"},category:{static:"cta explore milestones"},action:{static:"click"},label:{static:"",dynamic:!0}}}]),_sz.push(["event_tracking",{id:904,configuration:{trackOn:{urlMatch:{pattern:"^https://www\\.varetire\\.org/education/$",options:"i"}},type:"click",click:{cssSelector:"div.int-page.container > div.row > main.col-12.col-md-8.col-lg-9.pr-xl-0 > div.mid-gutter > div.callout-appointment.p-3.p-lg-5.mb-4.border-0 > p.text-center.text-lg-left.m-0 > a"},category:{static:"Education Home"},action:{static:"click"},label:{static:"One-on-One Counseling Appointments | Book an Appointment"}}}]),_sz.push(["event_tracking",{id:1074,configuration:{trackOn:{urlMatch:{pattern:"https://www\\.varetire\\.org",options:"i"}},type:"click",click:{cssSelector:"div.int-page.container > div.row > aside.right-content.right-callout.col-12.col-md-4.col-lg-3.my-xl-3.px-xl-5 > a > div.callout-block.dcp-callout > div.callout-overlay > section.callout-caption.px-5.p-md-3.p-xl-4"},category:{static:"cta dcp education specialists"},action:{static:"click"},label:{static:"DCP Education Specialists Available"}}}]),_sz.push(["event_tracking",{id:1075,configuration:{trackOn:{urlMatch:{pattern:"https://www\\.varetire\\.org",options:"i"}},type:"click",click:{cssSelector:"div.int-page.container > div.row > aside.right-content.right-callout.col-12.col-md-4.col-lg-3.my-xl-3.px-xl-5 > a > div.callout-block.finwell-callout > div.callout-overlay > section.callout-caption.px-5.p-md-3.p-xl-4"},category:{static:"All Pages"},action:{static:"click"},label:{static:"myVRS Financial Wellness | Tips, tools and Timesavers"}}}]),_sz.push(["event_tracking",{id:1076,configuration:{trackOn:{urlMatch:{pattern:"^https://www\\.varetire\\.org$",options:"i"}},type:"click",click:{cssSelector:"div > div.box3-home.py-4 > div.container.home-callout > section.row.px-4.px-sm-0 > div.col-12.col-sm-6.col-xl-3.order-4.order-sm-3 > a.callout-media-block.h-100 > div.media.d-block"},category:{static:"Home Page Callouts"},action:{static:"click"},label:{static:"myVRS Financial Wellness | Reduce your financial stress"}}}]),_sz.push(["event_tracking",{id:1134,configuration:{trackOn:{urlMatch:{pattern:"announcements\\.html",options:"i"}},type:"click",click:{cssSelector:'a.btn.btn-secondary.btn-lg.m-0.p-3.d-flex.justify-content-center.align-items-center.w-100[href*="/member-news/"][href*="/announcements.html"]'},category:{static:"Member News"},action:{static:"click"},label:{static:"Announcements Button"}}}]),_sz.push(["event_tracking",{id:1308,configuration:{trackOn:{urlMatch:{pattern:"^https://www\\.dmv\\.virginia\\.gov/vehicles/title$",options:"i"}},type:"click",click:{cssSelector:".c-button"},category:{static:"all pages"},action:{static:"click"},label:{static:"CTA Electronic Title"}}}]),_sz.push(["event_tracking",{id:1324,configuration:{trackOn:{urlMatch:{pattern:"https://www\\.varetire\\.org/contact",options:"i"}},type:"click",click:{cssSelector:"div.five9-frame > div.five9-frame-minimized > div.five9-header > div.five9-chat-button"},category:{static:"cta contact"},action:{static:"click"},label:{static:"Chat"}}}]),_sz.push(["event_tracking",{id:1536,configuration:{trackOn:{urlMatch:{pattern:"^https://www\\.dmv\\.virginia\\.gov/vehicles/title/etitle$",options:"i"}},type:"click",click:{cssSelector:".c-button.casualSalesClick"},category:{static:"all pages"},action:{static:"click"},label:{static:"eTitle Page Casual Sales Click"}}}]),_sz.push(["event_tracking",{id:1655,configuration:{trackOn:{urlMatch:{pattern:"^https://www\\.varetire\\.org/education$",options:"i"}},type:"click",click:{cssSelector:"div.int-page.container-fluid.container-sm > div.row > main.col-12.col-md-8.col-lg-9.col-xl-10 > div.mid-gutter > div.row.mb-4 > div.col-12.col-lg-6 > div.callout-appointment.p-3.p-lg-5.mb-4.border-0 > p.text-center.text-lg-left.m-0 > a"},category:{static:"education home"},action:{static:"click"},label:{static:"Retirement Education Seminars"}}}]),_sz.push(["event_tracking",{id:1656,configuration:{trackOn:{urlMatch:{pattern:"^https://www\\.varetire\\.org/education/retirement-education-seminars$",options:"i"}},type:"click",click:{cssSelector:"div.int-page.container-fluid.container-sm > div.row > main.col-12.col-md-8.col-lg-9.col-xl-10 > div.mid-gutter > section.transition-boxes.py-3.pb-lg-5.invisible-print-block > div.row > div.col.shadow-lg > article > div.transition-box-content > p > a.btn.btn-primary"},category:{static:"education pages"},action:{static:"click"},label:{static:"RES Book Now"}}}]),_sz=_sz||[],function(w,d,sz,undefined){function process(args){var name=args[0];core.actions[name]===undefined?core.action("set",args):core.action(name,args.slice(1))}var core={curr:w.location.href,ref:d.referrer,esc:function(str){return encodeURIComponent(new String(str).replace(/(\r?\n)+/g," ").replace(/\s+/g," ").replace(/^\s+|\s+$/,""))},empty:function(e){return e==undefined||e==null||e==""},isarray:function(arr){return arr==undefined||arr==null?!1:Array&&typeof Array.isArray=="function"?Array.isArray(arr):Object.prototype.toString.call(arr)==="[object Array]"},tag:function(str){return d.getElementsByTagName?d.getElementsByTagName(str):[]},id:function(str){return d.getElementById?d.getElementById(str):!1},clone:function(o){var n={};for(var i in o)o.hasOwnProperty(i)&&(n[i]=o[i]);return n},rnd:function(){return Math.floor(Math.random()*1e5)},txt:function(o){return o.textContent?o.textContent:o.innerText},trim:function(str){return!str||typeof str!="string"?str:typeof str.trim=="function"?str.trim():str.replace(/^\s+|\s+$/gi,"")},uuid:function(){var S4=function(){return((1+Math.random())*65536|0).toString(16).substring(1)};return S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4()},navtime:function(){var perf=w.performance||w.webkitPerformance||w.mozPerformance||w.msPerformance;return!perf||!perf.timing||perf.timing.navigationStart<1?null:(new Date).getTime()-perf.timing.navigationStart},_isready:!1,_readyhandlers:[],register:function(n,f){f.base=this.actions[n];this.actions[n]=f},actions:{},action:function(n,a){this.actions[n].apply(this.actions,a)},data:[],ready:function(f){if(f===undefined)return this._isready||core.done();this.when(this.ready,f)},queueready:function(f){this._isready&&core.done()?f():this._readyhandlers.push(f)},done:function(){return this._isloaded&&d&&d.body!=null&&(d.readyState=="interactive"||d.readyState=="complete")},_isloaded:!1,_whenTimer:null,when:function(cond,what){cond()?what():setTimeout(function(){core.when(cond,what)},50)},fmt:function(){for(var reg,_a=Array.prototype.slice.call(arguments),s=_a[0],a=_a.slice(1),i=0;i'+(o.type=="warn"?"Warning:<\/b> ":"")+decodeURIComponent(new String(this.fmt.apply(this,o.msg)).replace(/(&[a-z_]+=|\?)/g,"
   $1"))+"<\/p>";_c=d.createElement("a");_c.href="#";_c.innerHTML="× Close";_c.style.cssText="display:block;float:right;color:black;text-decoration:none;";_c.onclick=function(){return _e.parentNode.removeChild(_e),core._logshown=!1,!1};_e=d.createElement("div");_e.style.cssText="position:fixed;top:10px;right:10px;background:white;border:1px #ccc solid;width:800px;padding:20px;padding-bottom:10px;font-size:12px;font-family:Arial;line-height:135%;max-height:90%;overflow-y:auto;text-align:left;z-index:999";_e.innerHTML=s;_e.id="szdebugarea";_e.appendChild(_c);d.body.appendChild(_e)},cookie:function(n,v,o){var expires,date,cookiev,cookies,i,cookie;if(typeof v!="undefined"){o=o||{path:"/"};v===null&&(v="",o.expires=-1);expires="";o.expires&&(typeof o.expires=="number"||o.expires.toUTCString)&&(typeof o.expires=="number"?(date=new Date,date.setTime(date.getTime()+o.expires*864e5)):date=o.expires,expires="; expires="+date.toUTCString());var path=o.path?"; path="+o.path:"; path=/",domain=o.domain?"; domain="+o.domain:"",secure=o.secure?"; secure":"",sameSite=o.sameSite?"; samesite="+o.sameSite:"; samesite=lax";d.cookie=[n,"=",encodeURIComponent(v),expires,path,domain,secure,sameSite,].join("")}else{if(cookiev=null,d.cookie&&d.cookie!=="")for(cookies=d.cookie.split(";"),i=0;i0;){if(key=parts.shift(),prop[key]===undefined){prop=0;break}if(parts.length==0)break;prop=prop[key]}prop&&key?prop[key]=val:core.warn("No property named {0}",name)}),core.register("register",function(args){core.register(args[0],args[1])}),core.register("custom",function(f,name){var msg="Running custom function";name&&name!=""&&(msg+=": "+name+"<\/strong>");core.log(msg);try{f()}catch(e){core.warn("Custom function failed! "+e.message)}}),core.register("setcurr",function(v){core.curr=v}),core.register("setref",function(v){core.ref=v}),core.register("loaded",function(){core._isloaded=!0}),core.register("showlog",function(){core.showlog()}),data=[],orig=[],i=0;i0)core._readyhandlers.shift().call();core._isready=!0});sz.push=function(args){core.data.push(args);core.ready()?process(args):core._readyhandlers.push(function(){process(args)})};sz.core=core}(window,document,_sz),function(w,d,sz,undefined){function request(path,reqObj,callback){sz.core.request(path,reqObj);callback&&typeof callback=="function"&&callback()}function fetchRequest(path,reqObj,fetchOptions){fetchOptions=fetchOptions||{};var resource,requestOptions={},requestParams={};if(reqObj!=null)for(k in reqObj)reqObj.hasOwnProperty(k)&&!sz.core.empty(reqObj[k])&&(requestParams[k]=reqObj[k]);return fetchOptions.method=="POST"||fetchOptions.method=="post"?(resource="https://"+path,requestOptions={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(requestParams)}):(resource="https://"+sz.core.requesturl(path,requestParams),requestOptions={method:"GET"}),fetchOptions.keepAlive===!0&&(requestOptions.keepalive=!0),sz.core.fetch(resource,requestOptions)}function trackOnClick(href){request(sz.analytics.endpoint.fullpath(),{accountid:opts.accountid,prev:opts.prev,ourl:href,ref:w.location.href,autoonclick:1,ckl:opts.ckl,rt:null})}function excludeOnClick(href,exclusions){var currentHref,i;try{if(currentHref=w.location.href.split("#")[0],href==null||href==""||href.toLowerCase().indexOf("javascript:")==0||href.indexOf("#")==0||href.charAt(href.length-1)=="#"||href==w.location.href||href==currentHref||href.indexOf(currentHref+"#")==0)return!0;if(sz.core.isarray(exclusions)!==!0)return!1;for(i=0;i{tracker.updateState()}),tracker.updateState(),tracker},internalEventTypes={afterPageviewTracked:"after_pageview_tracked"},internalEventHandlers={notify:function(eventType){var args=Array.prototype.slice.call(arguments,1),eventTypeConfiguration=internalEventHandlers[eventType],listeners,i;if(eventTypeConfiguration&&typeof eventTypeConfiguration=="object"&&(listeners=eventTypeConfiguration.listeners,listeners&&listeners.length&&!(listeners.length<1)))for(i=0;i0&&(pingValues.tms=trackedTimeMs)),sz.analytics.observer!=null&&(observedEvents=sz.analytics.observer.isRecording?sz.analytics.observer.recordedEvents:0,observedEvents>0&&(pingValues.obsevt=observedEvents),observedDuration=sz.analytics.observer.isRecording?sz.analytics.observer.recordedDuration:0,observedDuration>0&&(pingValues.obstms=observedDuration)),Object.keys(pingValues)<1)||(nextPing=JSON.stringify(pingValues),nextPing!=lastPing)&&(whenTracked(function(){fetchRequest(sz.analytics.endpoint.fullpath("ping.aspx"),pingParams(pingValues),{method:"GET",keepAlive:d.visibilityState=="hidden"})}),lastPing=nextPing))});sz.core.register(registry.dump,function(){console.debug(sz.analytics);console.debug(opts);console.debug(internalOpts)});sz.core.register(registry.noOnClick,function(v){sz.analytics.config.noonclick=v});sz.core.register(registry.afterPageviewTracked,function(handler){typeof handler=="function"?internalEventHandlers[internalEventTypes.afterPageviewTracked].listeners.push(handler):sz.core.warn("Invalid argument provided to after pageview tracked, was expecting function, but got {0}",typeof handler)});sz.core.register(registry.set,function(name,value){opts.hasOwnProperty(name)?opts[name]=value:this.set.base(name,value)});sz.core.register(registry.breadcrumbs,function(selector){var bc,extractedPath;(internalOpts.breadcrumbsSelector=selector,selector&&d.querySelector)&&(bc=d.querySelector(selector),bc&&(extractedPath=sz.core.trim(sz.core.txt(bc)),sz.core.empty(extractedPath)||sz.push([registry.path,extractedPath])))});sz.core.register(registry.path,function(newPath){sz.core.empty(newPath)||(opts.path=newPath,sz.push([registry.kvp,"path",newPath]),sz.core.log("Path set: {0}",newPath))});sz.core.register(registry.groupSelector,function(selector){var res,groups,i,t,values,j;if(internalOpts.groupSelector=selector,selector&&d.querySelectorAll){for(res=d.querySelectorAll(selector),groups=[],sz.core.empty(opts.groups)||(groups=opts.groups.split(",")),i=0;i0&&(opts.groups=groups.join(","),sz.push([registry.kvp,"szGroupName",groups]),sz.core.log("Groups set: {0}",groups.join(", ")))}});sz.core.register(registry.metaGroupName,function(name){var me,gc,i,metaValue,values,j;for(internalOpts.metaGroupName=name,me=sz.core.tag("meta"),gc=[],sz.core.empty(opts.groups)||(gc=opts.groups.split(",")),i=0;i0&&(opts.groups=gc.join(","),sz.push([registry.kvp,"szGroupName",gc]),sz.core.log("Metagroup set: {0}",gc.join(", ")))});sz.core.register(registry.param,function(n,v){if(typeof n=="object")for(i in n)n.hasOwnProperty(i)&&sz.push([registry.param,i,n[i]]);else sz.core.log("Param {0} = {1}",n,v),internalOpts.grk==null&&(internalOpts.grk={}),internalOpts.grk[n]=v});getKvpValues=function(input){var values=[];if(sz.core.isarray(input))for(i=0;i0)for(i=0;i?@\[\\\]^_`{|}~]/.test(chr)?"\\":"")+chr}).join(""))},isUniqueSelector:function(str,el){if(!state.supportQuerySelector||!str)return!1;var matches=d.querySelectorAll(str);return matches.length===1&&matches[0]===el},pathFromSrc:function(src){var a=d.createElement("a"),pathName;return a.href=src,pathName=a.pathname,a=null,pathName||""},parent:function(el){var parent=el.parentNode;return parent.nodeType==1&&!/\b(html|body|head)\b/i.test(parent.tagName)?parent:null},childSelector:function(el,tagName){var i,sibling;if(!el.parentNode)return null;var siblings=el.parentNode.children,siblingsLength=siblings.length,index=0,theOnlyType=!0;for(i=0;i":"")+tagName+(childSelector||"")},cssSelector:function(el){var orgEl=el,selector="",s="",filename="",pathname="",tagName,uniqueClass,uniqueClassCount,i,l,cl,count,hash,hostname,name,labelFor,pseudoChild;do{if(!el.tagName)return"";if(tagName=el.tagName.toLowerCase(),/\b(html|body|head)\b/i.test(tagName))return tagName+selector;var id=el.id,className=sz.core.trim(el.className),classList=el.classList||className.split(/\s+/);if(typeof id!="string"&&(id=null),id&&((id=helpers.cssEscape(id),s="#"+id+selector,helpers.isUniqueSelector(s,orgEl))||(s=tagName+"[id='"+id.replace("'","\\'")+"']"+selector,helpers.isUniqueSelector(s,orgEl))))return s;if(uniqueClass="",className&&d.getElementsByClassName){for(uniqueClassCount=Infinity,i=0,l=classList.length;i"+selector));return selector},viewPort:function(){return{l:Math.round((w.pageXOffset||d.documentElement.scrollLeft)-(d.documentElement.clientLeft||0)),t:Math.round((w.pageYOffset||d.documentElement.scrollTop)-(d.documentElement.clientTop||0)),w:Math.round(w.innerWidth||d.documentElement.clientWidth||w.screen.width),h:Math.round(w.innerHeight||d.documentElement.clientHeight||w.screen.height)}},elementPoint:function(e,boundingElement){e=e||w.event;var pagePoint=helpers.pagePoint(e),rect=boundingElement.getBoundingClientRect(),scrollTop=d.documentElement.scrollTop?d.documentElement.scrollTop:d.body.scrollTop,scrollLeft=d.documentElement.scrollLeft?d.documentElement.scrollLeft:d.body.scrollLeft;return{x:Math.round(pagePoint.x-(rect.left+scrollLeft)),y:Math.round(pagePoint.y-(rect.top+scrollTop))}},pagePoint:function(e){e=e||w.event;var pageX=e.pageX,pageY=e.pageY;return pageX===undefined&&(pageX=e.clientX+d.body.scrollLeft+d.documentElement.scrollLeft,pageY=e.clientY+d.body.scrollTop+d.documentElement.scrollTop),{x:pageX,y:pageY}},preEventHandler:function(){state.scrollCount<1&&state.clickCount<1&&dispatch({pos:state.initViewPort,type:"scroll"})}},listeners,hmOrder,matcher;sz.analytics.heatmap={config:config,state:state,helpers:helpers};listeners={click:function(e){var srcElement,boundingElement,path,entry;e.szbHandled!==!0&&(helpers.preEventHandler(e),state.clickCount++,srcElement=helpers.sourceElement(e),boundingElement=helpers.boundingElement(srcElement),boundingElement!=null)&&(path=helpers.cssSelector(boundingElement),path&&path!="html")&&(entry={path:path,point:helpers.elementPoint(e,boundingElement),type:"click"},dispatch(entry),e.szbHandled=!0)},scroll:function(e){state.scrollHandle!=null&&clearTimeout(state.scrollHandle);state.scrollHandle=setTimeout(function(){helpers.preEventHandler(e);state.scrollCount++;var view=helpers.viewPort();(view.t!=state.lastViewPort.t||view.h!=state.lastViewPort.h)&&(dispatch({pos:view,type:"scroll"}),state.lastViewPort=view)},config.scrollDelay)},resize:function(){var cur=helpers.viewPort();state.scrollCount&&cur.h==state.lastViewPort.h||listeners.scroll()}};hmOrder=0;matcher={keys:Object.keys?Object.keys:function(o){var k,p;if(o!==Object(o))throw new TypeError("Object.keys called on a non-object");k=[];for(p in o)Object.prototype.hasOwnProperty.call(o,p)&&k.push(p);return k},extract:function(arr){for(var kv,k,v,obj={},ix=0;ix1&&(k=kv.shift(),v=kv.join("="),v.length>0&&(obj[k]=v));return obj},decompose:function(url){url=encodeURI(decodeURI(sz.core.trim(url||"").replace(/^.*?:\/\//g,"").split("#")[0]));var parts=url.split("?"),base=parts.shift().replace(/^www\./,"").replace(/\/+$/,""),params=this.extract(parts.join("?").split("&"));return{resource:base,params:params}},check_url:function(current,match){var keys,ix,k;if(current.resource===match.resource){for(keys=this.keys(match.params),ix=0;ixinclude = "{0}"
exclude = "{1}"',encodeURI(includeMatch||""),encodeURI(excludeMatch||"")),result},matches:{permanent:[],include:[],exclude:[]},add_matches:function(m){m!=null&&(this.is_array(m.permanent)&&(this.matches.permanent=this.matches.permanent.concat(m.permanent)),this.is_array(m.include)&&(this.matches.include=this.matches.include.concat(m.include)),this.is_array(m.exclude)&&(this.matches.exclude=this.matches.exclude.concat(m.exclude)))},replacements:[],add_replacement:function(r){this.is_function(r)&&this.replacements.push(r)},is_function:function(x){return x!=null&&typeof x=="function"&&x instanceof Function},is_array:function(x){return x!=null&&x instanceof Array&&x.concat!=undefined&&x.length!=undefined},cur_url:function(){var u=((sz.analytics&&sz.analytics.opts?sz.analytics.opts("url"):"")||sz.core.curr).toLowerCase(),k;if(this.replacements&&this.replacements.length>0)for(k=0;k *:nth-child(1)").length===1}catch(e){state.supportQuerySelector=!1}sz.core.log("Enabling behaviour map tracking");state.running=!0;state.lastViewPort=helpers.viewPort();state.initViewPort=helpers.viewPort();initializeListeners()}});sz.core.ready(function(){sz.core.log("Running behaviour map ready at {0}",(new Date).getTime());sz.push(["heatmapinit"])})}(window,document,_sz),function(sz){"use strict";(()=>{function now(){return Date.now()}function getDistance(a,b){return Math.hypot(a.x-b.x,a.y-b.y)}function takeWhileReverse(arr,predicate,startIndex){const result=[];for(let i=startIndex!=null?startIndex:arr.length-1;i>=0&&i0&&arr.splice(0,toRemoveCount),toRemoveCount}function isElement(val){return val!=null&&val instanceof Element}function pagePoint(e){return{x:Math.round(e.pageX),y:Math.round(e.pageY)}}function targetPoint(e,target){var _a,_b;const point=pagePoint(e);var rect=target.getBoundingClientRect(),scrollTop=((_a=document.documentElement)==null?void 0:_a.scrollTop)!=null?document.documentElement.scrollTop:document.body.scrollTop,scrollLeft=((_b=document.documentElement)==null?void 0:_b.scrollLeft)!=null?document.documentElement.scrollLeft:document.body.scrollLeft;return{x:Math.round(point.x-rect.left-scrollLeft),y:Math.round(point.y-rect.top-scrollTop)}}function getWindowDimensions(sz2){var _a,_b,_c,_d;let windowWidth=(_a=window.innerWidth)!=null?_a:0,windowHeight=(_b=window.innerHeight)!=null?_b:0;const helpers=(_d=(_c=sz2.analytics)==null?void 0:_c.heatmap)==null?void 0:_d.helpers;if(isObject(helpers)&&isFunction(helpers.viewPort)){const viewPort=helpers.viewPort();windowWidth=viewPort.w;windowHeight=viewPort.h}return{width:windowWidth,height:windowHeight}}function getElementSelector(sz2,element){var _a,_b;let elementSelector="";const helpers=(_b=(_a=sz2.analytics)==null?void 0:_a.heatmap)==null?void 0:_b.helpers;if(isObject(helpers)&&isFunction(helpers.boundingElement)&&isFunction(helpers.cssSelector)){const boundingElement=helpers.boundingElement(element);boundingElement&&(elementSelector=helpers.cssSelector(boundingElement))}return elementSelector}function isStruggleTracker(value){return isObject(value)&&typeof value.logStruggle=="function"&&typeof value.setTrackingContext=="function"}var __typeError=msg=>{throw TypeError(msg);},__accessCheck=(obj,member,msg)=>member.has(obj)||__typeError("Cannot "+msg),__privateGet=(obj,member,getter)=>(__accessCheck(obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd=(obj,member,value)=>member.has(obj)?__typeError("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet=(obj,member,value,setter)=>(__accessCheck(obj,member,"write to private field"),setter?setter.call(obj,value):member.set(obj,value),value),analyticsRegistry={afterPageviewTracked:"after_pageview_tracked",ping:"ping"},_sz,_trackers,StruggleManager=class{constructor(sz2){__privateAdd(this,_sz);__privateAdd(this,_trackers,{});__privateSet(this,_sz,sz2)}addTracker(tracker){const existing=__privateGet(this,_trackers)[tracker.type];existing&&(__privateGet(this,_sz).core.log("Uninstalling struggle tracker: {0}",tracker.type),existing.uninstall());__privateGet(this,_sz).core.log("Installing struggle tracker: {0}",tracker.type);__privateGet(this,_trackers)[tracker.type]=tracker;tracker.install()}clearTrackers(){[...Object.values(__privateGet(this,_trackers))].forEach(tracker=>{tracker.uninstall(),delete __privateGet(this,_trackers)[tracker.type]})}},isObject,isFunction,_sz2,_config,_handler,_listeners,_clickBuffer,RageClickTracker,RageClickStruggle,_sz3,_config2,_handler2,_listeners2,_continuousScrollBuffer,_backAndForthScrollBuffer,_rageScrollBuffer,_lastY,_lastDirection,ExcessiveScrollTracker,ExcessiveScrollStruggle,StruggleTracker;_sz=new WeakMap;_trackers=new WeakMap;isObject=x=>x!=null&&typeof x=="object";isFunction=x=>x!=null&&typeof x=="function";RageClickTracker=(class{constructor(sz2,config){__privateAdd(this,_sz2);__privateAdd(this,_config);__privateAdd(this,_handler,null);__privateAdd(this,_listeners,[]);__privateAdd(this,_clickBuffer,[]);this._type="rage_click";__privateSet(this,_sz2,sz2);__privateSet(this,_config,{...config})}get type(){return this._type}install(){if(__privateGet(this,_handler)==null){const self=this;__privateSet(this,_handler,function(e){self.handleClick.call(self,e)});window.addEventListener("click",__privateGet(this,_handler),{capture:!0,passive:!0})}}uninstall(){__privateGet(this,_handler)!=null&&(window.removeEventListener("click",__privateGet(this,_handler)),__privateSet(this,_handler,null))}addListener(listener){__privateGet(this,_listeners).push(listener)}clearListeners(){__privateGet(this,_listeners).length=0}emitStruggle(struggle){__privateGet(this,_sz2).core.log("🔥 Rage click detected: {0}",JSON.stringify(struggle.debugLog()));__privateGet(this,_listeners).forEach(listener=>{try{listener(struggle)}catch(err){__privateGet(this,_sz2).core.warn("Failed to notify rage click listener: {0}",err instanceof Error?err.message:err)}})}handleClick(e){if(isElement(e.target)){const point=targetPoint(e,e.target);__privateGet(this,_clickBuffer).push({clientX:e.clientX,clientY:e.clientY,timestamp:now(),target:e.target,targetX:point.x,targetY:point.y});this.detectRageClick()}}detectRageClick(){this.pruneOldClicks();for(let i=0;i<__privateGet(this,_clickBuffer).length;i++){const base=__privateGet(this,_clickBuffer)[i],basePoint={x:base.clientX,y:base.clientY},cluster=__privateGet(this,_clickBuffer).filter(clickRecord=>{if(clickRecord.target===base.target)return!0;const distance=getDistance({x:clickRecord.clientX,y:clickRecord.clientY},basePoint);if(distance<=__privateGet(this,_config).clickRadius)return!0});if(cluster.length>=__privateGet(this,_config).clickThreshold){const elementSelector=getElementSelector(__privateGet(this,_sz2),base.target),windowDimensions=getWindowDimensions(__privateGet(this,_sz2)),delta=cluster[cluster.length-1].timestamp-cluster[0].timestamp;this.emitStruggle(new RageClickStruggle({type:"rage_click",x:base.targetX,y:base.targetY,node:base.target,elementSelector,clicks:cluster.length,delta,windowWidth:windowDimensions.width,windowHeight:windowDimensions.height}));this.clearClicks();return}}}pruneOldClicks(){const t=now();removeWhile(__privateGet(this,_clickBuffer),x=>t-x.timestamp>__privateGet(this,_config).timeWindowMs)}clearClicks(){__privateGet(this,_clickBuffer).length=0}});_sz2=new WeakMap;_config=new WeakMap;_handler=new WeakMap;_listeners=new WeakMap;_clickBuffer=new WeakMap;RageClickStruggle=(class{constructor(struggle){this.type="rage_click";this.x=struggle.x;this.y=struggle.y;this.node=struggle.node;this.elementSelector=struggle.elementSelector;this.clicks=struggle.clicks;this.delta=struggle.delta;this.windowWidth=struggle.windowWidth;this.windowHeight=struggle.windowHeight}logParameters(){return{st:"rage",p:this.elementSelector,cx:this.x,cy:this.y,cc:this.clicks,cd:this.delta,ww:this.windowWidth,wh:this.windowHeight}}sessionRecordableCustomEvent(){return{type:"rage_click",event:{node:this.node,clicks:this.clicks,delta:this.delta,x:this.x,y:this.y}}}debugLog(){return{elementSelector:this.elementSelector,x:this.x,y:this.y,windowWidth:this.windowWidth,windowHeight:this.windowHeight,clicks:this.clicks,delta:this.delta}}});ExcessiveScrollTracker=(class{constructor(sz2,config){__privateAdd(this,_sz3);__privateAdd(this,_config2);__privateAdd(this,_handler2,null);__privateAdd(this,_listeners2,[]);__privateAdd(this,_continuousScrollBuffer,{scrolls:[]});__privateAdd(this,_backAndForthScrollBuffer,{scrolls:[]});__privateAdd(this,_rageScrollBuffer,{scrolls:[]});__privateAdd(this,_lastY,0);__privateAdd(this,_lastDirection,null);this._type="excessive_scroll";__privateSet(this,_sz3,sz2);__privateSet(this,_config2,{...config});__privateSet(this,_lastY,window.scrollY)}get type(){return this._type}install(){if(__privateGet(this,_handler2)==null){const self=this;__privateSet(this,_handler2,function(){self.handleScroll.call(self)});window.addEventListener("scroll",__privateGet(this,_handler2),{passive:!0})}}uninstall(){__privateGet(this,_handler2)!=null&&(window.removeEventListener("scroll",__privateGet(this,_handler2)),__privateSet(this,_handler2,null))}addListener(listener){__privateGet(this,_listeners2).push(listener)}clearListeners(){__privateGet(this,_listeners2).length=0}emitStruggle(struggle){__privateGet(this,_sz3).core.log("📜 Excessive scroll detected: {0}",JSON.stringify(struggle.debugLog()));__privateGet(this,_listeners2).forEach(listener=>{try{listener(struggle)}catch(err){__privateGet(this,_sz3).core.warn("Failed to notify excessive scroll listener: {0}",err instanceof Error?err.message:err)}})}handleScroll(){const timestamp=now(),currentY=window.scrollY;if(currentY!==__privateGet(this,_lastY)){const deltaY=currentY-__privateGet(this,_lastY);__privateSet(this,_lastY,currentY);const windowDimensions=getWindowDimensions(__privateGet(this,_sz3));if(!(windowDimensions.height<1)){const jitterThreshold=Math.min(10,.1*windowDimensions.height);if(!(Math.abs(deltaY)0?"down":"up",deltaPages=Math.abs(deltaY)/windowDimensions.height,scroll={direction,deltaPages,scrollY:currentY,timestamp};this.updateBufferAndDetect({buffer:__privateGet(this,_continuousScrollBuffer),predicate:()=>this.shouldDebounce(__privateGet(this,_continuousScrollBuffer),timestamp),updateFn:buffer=>buffer.scrolls.push(scroll),detectFn:()=>this.detectContinuousScroll(timestamp,windowDimensions)});this.updateBufferAndDetect({buffer:__privateGet(this,_backAndForthScrollBuffer),predicate:()=>document.documentElement.scrollHeight<__privateGet(this,_config2).backAndForth.minScrollHeightMultiplier*window.innerHeight||this.shouldDebounce(__privateGet(this,_backAndForthScrollBuffer),timestamp),updateFn:buffer=>buffer.scrolls.push(scroll),detectFn:()=>this.detectBackAndForthScroll(timestamp,windowDimensions)});this.updateBufferAndDetect({buffer:__privateGet(this,_rageScrollBuffer),predicate:()=>this.shouldDebounce(__privateGet(this,_rageScrollBuffer),timestamp),updateFn:buffer=>{__privateGet(this,_lastDirection)!==direction?buffer.scrolls.push(scroll):buffer.scrolls.length>1&&(buffer.scrolls[buffer.scrolls.length-1]=scroll)},detectFn:()=>this.detectRageScroll(timestamp,windowDimensions)});__privateSet(this,_lastDirection,direction)}}}}updateBufferAndDetect(options){const{buffer,predicate,updateFn,detectFn}=options;predicate()||(updateFn(buffer),detectFn())}detectContinuousScroll(now2,windowDimensions){const scrolls=__privateGet(this,_continuousScrollBuffer).scrolls;if(this.pruneOldScrolls(scrolls,now2,__privateGet(this,_config2).continuous.timeWindowMs),!(scrolls.length<1)){if(scrolls.length>1){const lastDirection=scrolls[scrolls.length-1].direction;let i=scrolls.length-1;while(i>0){if(scrolls[i-1].direction!=lastDirection)break;i--}i>0&&scrolls.splice(0,i)}const direction=scrolls[0].direction,totalPages=this.getTotalPages(scrolls);if(totalPages>=__privateGet(this,_config2).continuous.pagesThreshold){const firstScroll=scrolls[0],lastScroll=scrolls[scrolls.length-1];this.emitStruggle(new ExcessiveScrollStruggle({type:"excessive_scroll",start_top:firstScroll.scrollY,end_top:lastScroll.scrollY,pattern:0,scrolls:scrolls.length,forward_pages:direction==="down"?totalPages:0,backward_pages:direction==="up"?totalPages:0,delta:lastScroll.timestamp-firstScroll.timestamp,windowWidth:windowDimensions.width,windowHeight:windowDimensions.height}));this.clearScrolls(scrolls);__privateGet(this,_continuousScrollBuffer).lastEmitted=now2}}}detectBackAndForthScroll(now2,windowDimensions){const scrolls=__privateGet(this,_backAndForthScrollBuffer).scrolls;if(this.pruneOldScrolls(scrolls,now2,__privateGet(this,_config2).backAndForth.timeWindowMs),!(scrolls.length<2)){const lastDir=scrolls[scrolls.length-1].direction;if(scrolls.some(x=>x.direction!==lastDir)){const lastDirScrolls=takeWhileReverse(scrolls,x=>x.direction===lastDir),prevDirScrolls=takeWhileReverse(scrolls,x=>x.direction!==lastDir,scrolls.length-lastDirScrolls.length-1),lastDirPages=this.getTotalPages(lastDirScrolls),prevDirPages=this.getTotalPages(prevDirScrolls);if(lastDirPages>=__privateGet(this,_config2).backAndForth.pagesThreshold&&prevDirPages>=__privateGet(this,_config2).backAndForth.pagesThreshold){const forwardPages=lastDir==="down"?lastDirPages:prevDirPages,backwardPages=lastDir==="up"?lastDirPages:prevDirPages,firstScroll=prevDirScrolls[prevDirScrolls.length-1],lastScroll=lastDirScrolls[0];this.emitStruggle(new ExcessiveScrollStruggle({type:"excessive_scroll",start_top:firstScroll.scrollY,end_top:lastScroll.scrollY,pattern:1,scrolls:lastDirScrolls.length+prevDirScrolls.length,forward_pages:forwardPages,backward_pages:backwardPages,delta:lastScroll.timestamp-firstScroll.timestamp,windowWidth:windowDimensions.width,windowHeight:windowDimensions.height}));this.clearScrolls(scrolls);__privateGet(this,_backAndForthScrollBuffer).lastEmitted=now2}}}}detectRageScroll(now2,windowDimensions){const scrolls=__privateGet(this,_rageScrollBuffer).scrolls;if(this.pruneOldScrolls(scrolls,now2,__privateGet(this,_config2).rage.timeWindowMs),scrolls.length>__privateGet(this,_config2).rage.directionChanges){const firstScroll=scrolls[0],lastScroll=scrolls[scrolls.length-1];this.emitStruggle(new ExcessiveScrollStruggle({type:"excessive_scroll",start_top:firstScroll.scrollY,end_top:lastScroll.scrollY,pattern:2,scrolls:scrolls.length,forward_pages:0,backward_pages:0,delta:lastScroll.timestamp-firstScroll.timestamp,windowWidth:windowDimensions.width,windowHeight:windowDimensions.height}));this.clearScrolls(scrolls);__privateGet(this,_rageScrollBuffer).lastEmitted=now2}}shouldDebounce(buffer,now2){return buffer.lastEmitted!==void 0&&now2-buffer.lastEmitted<__privateGet(this,_config2).detectionDebounceMs}pruneOldScrolls(buffer,now2,timeWindowMs){removeWhile(buffer,x=>now2-x.timestamp>timeWindowMs)}getTotalPages(scrolls){const totalPages=scrolls.reduce((acc,x)=>acc+x.deltaPages,0);return Number(totalPages.toFixed(2))}clearScrolls(scrolls){scrolls.length=0}});_sz3=new WeakMap;_config2=new WeakMap;_handler2=new WeakMap;_listeners2=new WeakMap;_continuousScrollBuffer=new WeakMap;_backAndForthScrollBuffer=new WeakMap;_rageScrollBuffer=new WeakMap;_lastY=new WeakMap;_lastDirection=new WeakMap;ExcessiveScrollStruggle=(class{constructor(struggle){this.type="excessive_scroll";this.start_top=struggle.start_top;this.end_top=struggle.end_top;this.pattern=struggle.pattern;this.scrolls=struggle.scrolls;this.forward_pages=struggle.forward_pages;this.backward_pages=struggle.backward_pages;this.delta=struggle.delta;this.windowWidth=struggle.windowWidth;this.windowHeight=struggle.windowHeight}logParameters(){return{st:"excessive_scroll",scst:this.start_top,scet:this.end_top,scpt:this.getPatternShorthand(this.pattern),scs:this.scrolls,scfw:this.forward_pages,scbw:this.backward_pages,scd:this.delta,ww:this.windowWidth,wh:this.windowHeight}}getPatternShorthand(pattern){switch(pattern){case 2:return"rage";case 1:return"bckfth";case 0:default:return"cont"}}sessionRecordableCustomEvent(){return{type:"excessive_scroll",event:{pattern:this.pattern,scrolls:this.scrolls,forward_pages:this.forward_pages,backward_pages:this.backward_pages,delta:this.delta}}}debugLog(){return{start_top:this.start_top,end_top:this.end_top,pattern:this.pattern,forward_pages:this.forward_pages,backward_pages:this.backward_pages,delta:this.delta,windowWidth:this.windowWidth,windowHeight:this.windowHeight}}}),function(){(sz==null?void 0:sz.core)!=null&&(sz==null?void 0:sz.analytics)!=null&&(sz.core.register("detect_struggles",(config,overwrite)=>{if(sz.analytics.struggleTracker!=null)if(overwrite==!0)sz.core.log("Disabling previously configured struggle tracker"),sz.analytics.struggleTracker.manager&&sz.analytics.struggleTracker.manager.clearTrackers(),sz.analytics.struggleTracker=null;else{sz.core.log("Struggle tracking already enabled, skipping enabling again");return}if(!isObject(config)){sz.core.warn("Could not configure struggle tracker with the supplied configuration: {0}",config?JSON.stringify(config):"null");return}const tracker=new StruggleTracker(sz,config);sz.analytics.struggleTracker=tracker;const struggleTrackers=[];if(isObject(config.rageClick)){const rageClickTracker=new RageClickTracker(sz,config.rageClick);rageClickTracker.addListener(function(struggle){tracker.logStruggle(struggle);const observer=sz.analytics.observer;isObject(observer)&&observer.customEvent(struggle.sessionRecordableCustomEvent())});struggleTrackers.push(rageClickTracker);sz.core.log("Configured rage click tracker with configuration: {0}",JSON.stringify(config.rageClick))}if(isObject(config.excessiveScroll)){const excessiveScrollTracker=new ExcessiveScrollTracker(sz,config.excessiveScroll);excessiveScrollTracker.addListener(function(struggle){tracker.logStruggle(struggle);const observer=sz.analytics.observer;isObject(observer)&&observer.customEvent(struggle.sessionRecordableCustomEvent())});struggleTrackers.push(excessiveScrollTracker);sz.core.log("Configured excessive scroll tracker with configuration: {0}",JSON.stringify(config.excessiveScroll))}struggleTrackers.length>0?(struggleTrackers.forEach(struggleTracker=>{tracker.manager.addTracker(struggleTracker)}),sz.core.log("Installed {0} struggle trackers",struggleTrackers.length)):sz.core.log("No struggle trackers to install")}),sz.push([analyticsRegistry.afterPageviewTracked,function(trackOpts){var _a;const struggleTracker=(_a=sz.analytics)==null?void 0:_a.struggleTracker;if(isStruggleTracker(struggleTracker)){const context={accountId:trackOpts.accountid,logId:trackOpts.luid,url:trackOpts.url,cookieless:trackOpts.ckl,sessionId:trackOpts.prev,counter:0};struggleTracker.setTrackingContext(context)}}]))}();StruggleTracker=(class{constructor(sz2,config){this._recordedStruggles=0;this.buffer=[];this.trackingContext=null;this.sz=sz2;this._config=config;this._manager=new StruggleManager(sz2)}get recordedStruggles(){return this._recordedStruggles}get config(){return this._config}get manager(){return this._manager}logStruggle(struggle){isObject(struggle)&&(this.buffer.push(struggle),this._recordedStruggles++,this.emitStruggles())}setTrackingContext(trackingContext){this.trackingContext!=null&&this.emitStruggles();this.trackingContext=trackingContext;trackingContext!=null&&this.emitStruggles()}emitStruggles(){if(this.trackingContext!=null&&!(this.buffer.length<1)){const struggles=[...this.buffer];this.buffer.length=0;const context=this.trackingContext,route=this.sz.analytics.endpoint.fullpath("struggle.aspx");struggles.forEach(struggle=>{const parameters={aid:context.accountId,luid:context.logId,url:context.url,prev:context.sessionId,ckl:context.cookieless,o:++context.counter,...struggle.logParameters()};this.sz.analytics.request(route,parameters)})}}})})()}(_sz),function(sz){"use strict";(()=>{function isElement(val){return val!=null&&val instanceof Element}function isHTMLInputElement(val){return isElement(val)&&val.tagName=="INPUT"}var handledKey="_sievt";(function(w,d){const tracker={instances:[],activeInstances:[],install:function(config,id){var instance={id,config,execute:!1,installed:!1,handler:function(){sz.core.log("Handler not hooked up for event tracking configuration #{0}",id)},trackEvent:function(){sz.core.log("Track event functionality not configured for event tracking configuration #{0}",id)}};tracker.instances.push(instance);instance.handler=function(evt){instance.execute&&(instance.trackEvent(evt.currentTarget),tracker.flagAsHandled(evt,id))};instance.trackEvent=function(target){if(isElement(target)){var category=tracker.getValue(config.category,target),action=tracker.getValue(config.action,target),label=tracker.getValue(config.label,target);sz.push(["event",category,action,label])}};sz.push(["after_pageview_tracked",function(trackOpts){var url=trackOpts!=null&&trackOpts.url?trackOpts.url:w.location.href;if(!tracker.shouldTrack(config,url,id)){instance.execute=!1;tracker.refreshActiveConfigurations();return}sz.core.log("Installing event tracking configuration #{0} for {1}",id,url);instance.execute=!0;switch(config.type){case"click":instance.installed=tracker.installClickListener(config.click,instance.handler,id);tracker.shared.installClickListener();break;default:instance.installed=!1}tracker.refreshActiveConfigurations()}])},installClickListener:function(clickConfig,handler,id){if(!clickConfig||!clickConfig.cssSelector)return sz.core.warn("Invalid css selector for event tracking configuration #{0} click event: {1}",id,clickConfig?clickConfig.cssSelector:""),!1;try{var elements=d.querySelectorAll(clickConfig.cssSelector);for(let i=0;i